use crate::config::{Config, SegmentType, new_config};


pub trait OtpQ0 {
    fn q0(&self) -> Config {
        new_config![
            Parity: Flag(false, |x| x.to_string(), false..=true, (0, 1), true, false, "Parity bit"),
            PcbAttnA: U8(4, |x| String::from(format!("1/{}", 2u32.pow(x as u32))), 0..=4, (1, 3), true, 4, "PcbAttnA")
            // pcbdac20a: U16()
        ]
    }
}

        // // config![
        // // Parity: Flag(false, |x| x.to_string(), false..=true, (0, 1), false, "Parity bit"),
        // // PcbAttnA: U8(4, |x| String::from(format!("1/{}", 2u32.pow(x as u32))), 0..=4, (1, 3), 4, "PcbAttnA"),
        // //]
        // let mut map = Config::new();
        // map.insert("Parity",
        // SegmentType::Flag{
        //     val: false,
        //     literal: Box::new(|x| x.to_string()),
        //     range: false..=true,
        //     occupied: (0, 1),
        //     default: false,
        //     desc: "Parity bit"}
        // );
        // map.insert("PcbAttnA",
        // SegmentType::U8{
        //     val: 4,
        //     literal: Box::new(|x| String::from(format!("1/{}", 2u32.pow(x as u32)))),
        //     range: 0..=4,
        //     occupied: (1, 3),
        //     default: 4,
        //     desc: "PcbAttnA"}
        // );
        // map
// pub struct ConfigData{
//     parity: B1,
//     pcbattna: B3,
//     pcbdac20a: B9,
//     pcbdac10a: B9,
//     outputinv1: bool,
//     lowerlim1: B7,
//     upperlim1: B7,
//     koff1: B12,
//     ksens1: B11,
//     pcbattnb:B3,
//     pcbdac20b: B9,
//     pcbdac10b: B9,
//     outputinv2: bool,
//     lowerlim2: B7,
//     upperlim2: B7,
//     koff2: B12,
//     ksens2: B12,
//     filterbw: B2,
//     filtertype: B1,
//     chansel: B1,
//     diffsel: B1,
//     corena: B1,
//     corsgn: B1,
//     out1sent: B1,
//     protocal: B3,
//     out2ena: bool,
//     pwm2period: B2,
//     pwm2sel: B2,
//     pwmmode: bool,
//     pwmframe: B1,
//     oscfull: B1,
//     arotdetect: B1,
//     indetpolarity: B1,
//     phasecomp: B3,
//     serialdata: B8,
//     pwmslope: B1,
//     infaildis: B1,
//     test: B1,
//     lock: B1,
//     #[skip] __: B4
// }

// #[derive(BitfieldSpecifier)]
// #[bitfield(filled = false)]
// pub enum ProtocolConf {
//     SENT,
//     PWM
// }